<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<title>Document</title>
</head>
<body>
	<!-- <script src="./promise-source.js"></script> -->
	<script type="text/javascript">
		/*
			promise的执行状态和上一个pormise的执行状态无关
			只要onFulfilled或者onRejected返回一个值 x,promise2都会进入 onFulFilled 的状态
			如果then中的参数不为函数，则延续上一个pormise的状态，返回相同值
		*/
		// 1、
		var promise6 = new Promise((resolve, reject) => {reject();});
		promise6
		// promise6执行reject()，then中执行第二个回调，返回123，所以下一个promisede状态是onFulfilled
			.then(null, function(){
				return 123
			})
			// 后边这两步因为都不是函数，所以延续上一个pormise的状态 onFulfilled，返回123
			.then(null,null)
			.then(null,null)
			.then((val) => {
				console.log('promise2 已完成', val)
			},() => {
				console.log('promise2 已拒绝', val)
			})
			// 最终打印 promise2 已完成，123
		// 2、
		/*var promise2 = new Promise((resolve) => { resolve('promise2 已完成') })
		var promsie3 = new Promise((resolve) => { resolve('pormise3 已完成') })
		promise2
			.then(() => {
				return promsie3
			})
			.then(val => {
				console.log(val)
			})
		// 3、
		var promise66 = Promise.reject(123);
		promise66
			.then(null, function(val){
				 console.log('------已拒绝:', val)
			})*/
		// 打印：------已拒绝:123
		// 4、
		var promise11 = function(){
			return new Promise((resolve,reject) => {
			  	setTimeout(function(){
			    	console.log('1')
			    	resolve('已完成')
			    },1000)
		  })
		}

		var promise21 = function(){
			return new Promise((resolve,reject) => {
			  	setTimeout(function(){
			    	console.log('2')
			     	reject('已拒绝')
			    },2000)
		  })
		}
		promise11()
			.then(function(){
				return promise21()
			})
			.then(function(val){ console.log('已完成', val) },function(val){ console.log('已拒绝原因', val) })
		// 打印： 1，2，已拒绝原因 已拒绝
		// 5、
		setTimeout(() => console.log('a'));
		Promise.resolve()
			.then(() => console.log('b'))
			.then(
				() => Promise.resolve('c').then((data) => {
					setTimeout(() => {console.log('d')})
					console.log('f')
					return data
				})
			)
			.then(data => {
				console.log(data)
			})
		/*
			执行过程：
			macro = ['setTimeout'] micro = ['then'] ===> 输出 b
			macro = ['setTimeout','setTimeout'] micro = ['then'] ===> 输出 f
			macro = ['setTimeout','setTimeout'] micro = ['then'] ===> 输出 c
			macro = ['setTimeout','setTimeout'] micro = [] ===> 输出 a d
		*/
		/*
			跳转页签：
				1、携带参数 ------ selectMonth = '2021-08'
					携带参数时，涉及到页签之间的切换、从首页跳转到信用风险的页签、从左侧菜单栏中跳转到页签
				2、不携带参数 ------ selectMonth = ''
					不携带参数 涉及到页签之间的切换、从左侧菜单栏中跳转页签
		*/
	</script>
</body>
</html>